/**
 * Generali Solutions d'assurances - Tous droits reserves &copy; 2007 - 2010
 */
package fr.generali.accueilclient.editique.courrier.services.impl;

import javax.xml.ws.WebServiceException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import fr.generali.accueilclient.commun.exception.AccueilClientBusinessException;
import fr.generali.accueilclient.commun.exception.AccueilClientTechnicalException;
import fr.generali.accueilclient.editique.courrier.services.IRechercheCourrierParCleService;
import fr.generali.accueilclient.editique.om.ICriteresCourrierParCle;
import fr.generali.accueilclient.editique.om.IListRechercheCourrierParCle;
import fr.generali.editique.page.ws.clerecherche.dto.RepRechercheCourrierParCleDto;
import fr.generali.editique.page.ws.clerecherche.dto.ReqCourrierParCleDto;
import fr.generali.editique.page.ws.clerecherche.services.FaultDetail;
import fr.generali.editique.page.ws.clerecherche.services.ICleRechercheWebService;

/**
 * The Class RechercheCourrierParCleService.
 * 
 * @author Holmes Kelly
 */

@Service("rechercheCourrierParCleService")
public class RechercheCourrierParCleService implements IRechercheCourrierParCleService {

    /**
     * LOGGER
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(RechercheCourrierParCleService.class);

    @Autowired
    @Qualifier("cleRechercheWebService")
    private ICleRechercheWebService cleRechercheWebService;

    @Autowired
    @Qualifier("rechercheCourrierParCleMapper")
    private RechercheCourrierParCleMapper rechercheCourrierParCleMapper;
    
    @Value("${editique.code.radb}")
    private String codeRADB;

    /**
     * {@inheritDoc}
     */
    @Override
    public IListRechercheCourrierParCle restituerCourrierParCleRecherche(ICriteresCourrierParCle criteresCourrierParCle)
                    throws AccueilClientBusinessException {

        IListRechercheCourrierParCle listRechercheCourrierParCle = null;

        if (criteresCourrierParCle != null) {

            try {
                
                criteresCourrierParCle.setApplicationRADB(codeRADB);
                
                ReqCourrierParCleDto reqCourrierParCleDto =
                                rechercheCourrierParCleMapper
                                                .mapperICriteresCourrierParCleToReqCourrierParCleDto(criteresCourrierParCle);

                RepRechercheCourrierParCleDto restituerCourrierParCleRecherche =
                                cleRechercheWebService.restituerCourrierParCleRecherche(reqCourrierParCleDto);

                listRechercheCourrierParCle =
                                rechercheCourrierParCleMapper
                                                .mapperRepRechercheCourrierParCleDtoToIListRechercheCourrierParCle(restituerCourrierParCleRecherche);

            } catch (WebServiceException e) {
                LOGGER.debug(e.getMessage());
                throw new AccueilClientTechnicalException(e.getMessage());

            } catch (FaultDetail e) {
                LOGGER.debug(e.getMessage());
                throw new AccueilClientBusinessException(e.getMessage(), e);
            }
        }

        return listRechercheCourrierParCle;
    }

}
